#!/usr/bin/python
# coding=utf-8
import math
import serial
import sched,time
import struct
import binascii
import serial.tools.list_ports

port_list = list(serial.tools.list_ports.comports())
if len(port_list) == 0:
       print('找不到串口！')
else:
       print ('可用串口列表如下：')
       for i in range(0,len(port_list)):
              print(port_list[i])

# 说明：
# 在MCU端,需要把字符转换成hex,再写入flash中

COMX = input(r"请输入连接MCU的串口号,(exp:COM16) :")

# 初始化并打开串口
ser = serial.Serial()
ser.port = COMX
ser.baudrate = 115200
ser.timeout = 1
ser.open()

file = open('.\ota_head.bin', 'rb') #f是文件的文件句柄，它是在内存中的，是内存中的一个对象
#if(file != NULL)
print ('Opened bin file Ok!')

i = 0

star_flg = 'Update Start\r\n'.encode(encoding="utf-8")
ser.write(star_flg)
        
while 1:
       c = file.read(1)
       if not c:
              break
#       print(str(binascii.b2a_hex(c))[2:-1]) # for test
       ser.write((str(binascii.b2a_hex(c))[2:-1]).encode()) 
       i += 1
       if i % 64 == 0:  #写每N个字符等待1s时间,需要等待mcu回复‘C’,表示成功,接着发送下一帧数据
              time.sleep(1)
              print ('Wait for mcu ack...')
              recv = ''
              while(recv != 'C'):
                     recv = ser.read(1).decode()
              str1 = "Write MCU Flash block[%d] OK" %(i)
              print(str1)
          
ser.close()
file.close()


